/**
 * 
 */
package com.alstudio.core.voip;

import com.alstudio.app.ALLocalEnv;
import com.alstudio.module.xmpp.protocol.xmpp.packact.ALMessage;
import com.alstudio.pojo.module.user.User;

/**
 * 保存通话记录
 * 
 * @author alonso lee
 * 
 */
public class ALVoipDataBaseManager {

	public void saveCallHistory(final ALMessage msg) {
		new Thread() {
			public void run() {
				ALLocalEnv.getLocalEnv().getDatabase().insertCallHistory(msg);
			};
		}.start();
	}

	public void updateCallHistoryState(final String callId, final int state) {
		new Thread() {
			public void run() {
				ALLocalEnv.getLocalEnv().getDatabase()
						.updateCallHitstroyState(callId, state);
			};
		}.start();
	}

	public void updateCallHistoryReaded(final String callId) {
		new Thread() {
			public void run() {
				ALLocalEnv.getLocalEnv().getDatabase()
						.setCallHistoryReaded(callId);
			};
		}.start();
	}

	public void onInCommingCall(ALMessage msg) {
		User u = (User) msg.getData();
		u.setIsCaller(false);
		u.setCallRecordType(User.CALL_STATE_MISS);
		saveCallHistory(msg);
	}

	public void onOutGoingCall(ALMessage msg) {
		User u = (User) msg.getData();
		u.setIsCaller(true);
		u.setCallRecordType(User.CALL_STATE_MISS);
		saveCallHistory(msg);
	}

	public void onCallEstablished(ALMessage msg) {
		updateCallHistoryState(msg.getMsgId(), User.CALL_STATE_ACCEPT);
		updateCallHistoryReaded(msg.getMsgId());
	}

	public void onCallDisconnected(ALMessage msg) {
		saveCallHistory(msg);
	}

	public void onCallReject(ALMessage msg) {
		updateCallHistoryState(msg.getMsgId(), User.CALL_STATE_REJECT);
		// 主動拒絕或者被拒絕,設定為已讀
		updateCallHistoryReaded(msg.getMsgId());
	}

	public void onCallHandup(ALMessage msg) {
		if (msg != null){
			updateCallHistoryState(msg.getMsgId(), User.CALL_STATE_ACCEPT);
		}

	}

	public void onCallTimeout(ALMessage msg) {
		updateCallHistoryState(msg.getMsgId(), User.CALL_STATE_MISS);
	}

	/**
	 * 來電提醒
	 * 
	 * @param msg
	 */
	public void onCallNotice(ALMessage msg) {
		User u = (User) msg.getData();
		u.setIsCaller(false);
		u.setCallRecordType(User.CALL_STATE_CALL_NOTIFY);
		saveCallHistory(msg);
	}

	public void onUpdateCallingTime(ALMessage msg, int time) {
		ALLocalEnv.getLocalEnv().getDatabase()
				.updateCallingTime(msg.getMsgId(), time);
	}

}
